package com.decent.manager.config.security.context;

import com.decent.manager.system.auth.vo.LoginData;
import com.decent.manager.system.auth.vo.LoginUser;

/**
 * 登录用户上下文实现类
 *
 * @className: LoginContext
 * @author: wangyan
 * @date: 2022/4/16
 **/
public interface LoginContext {
    /**
     * 获取当前登录用户
     *
     * @return 当前登录用户信息
     */
    LoginUser getLoginUser();

    /**
     * 获取当前登录用户，如未登录，则返回null，不抛异常
     *
     * @return 当前登录用户信息
     */
    LoginUser getLoginUserWithoutException();

    /**
     * 获取当前登录用户的id
     *
     * @return 当前登录用户的id
     */
    Long getLoginUserId();

    /**
     * 获取当前登录用户的名
     *
     * @return 当前登录用户的name
     */
    String getLoginUserName();

    /**
     * 获取当前登录用户的账户
     *
     * @return 当前登陆用户的账户account
     */
    String getLoginUserAccount();

    /**
     * 判断当前登录用户是否有某资源的访问权限
     *
     * @param requestUri 请求的url
     * @return 是否有访问权限，true是，false否
     */
    boolean hasPermission(String requestUri);

    /**
     * 判断当前登录用户是否包含任意一个角色
     *
     * @param roleCodes 角色集合，逗号拼接
     * @return 是否包含任一角色，true是，false否
     */
    boolean hasAnyRole(String roleCodes);

    /**
     * 判断当前登录用户是否是超级管理员
     *
     * @return 当前登录用户是否是超级管理员
     */
    boolean isSuperAdmin();

    /**
     * 判断当前登录用户是否包含所有角色
     *
     * @param roleCodes 角色集合，逗号拼接
     * @return 是否包含所有角色，true是，false否
     */
    boolean hasAllRole(String roleCodes);

    /**
     * 获取当前登录用户的角色id
     *
     * @return 当前登录用户角色id
     */
    Long getLoginUserRoleId();

    /**
     * 获取最新的用户信息，用于修改之后前端获取
     *
     * @return 最新的用户信息
     **/
    LoginData getLoginUserUpToDate();
}
